package ms.platform.progress.dao;

import ms.platform.plan.dto.ModelDto;
import ms.platform.plan.dto.TargetDto;
import ms.platform.plan.model.ModelMeterPlan;
import ms.platform.plan.model.ModelPlan;
import ms.platform.plan.model.ModelProcessPlan;
import ms.platform.progress.dto.AnnexDto;
import ms.platform.progress.dto.MeterUsedDto;
import ms.platform.progress.dto.ProgressDetailDto;
import ms.platform.progress.dto.ProgressDto;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

public interface FactoryPlanDao {
	/**
	 * 厂商查询我的计划列表
	 * @param map
	 * @return
	 */
	public List<ModelDto> queryPageBusModelPlanList(Map<String, Object> map);
	
	/**
	 * 分页查询获取总条数
	 * @param map
	 * @return
	 */
	public Integer queryPageBusModelPlanCount(Map<String, Object> map);
	/**
	 * 根据计划id查询工序计划信息
	 * @param id
	 * @return
	 */
	public List<ModelProcessPlan> queryModelProcessByPlanId(Integer id);
	/**
	 * 根据计划id获取当前进度
	 * @param id
	 * @return
	 */
	public ModelProcessPlan queryCurrentProgress(Integer id);
	/**
	 * 根据计划id获取当前进度
	 * @param id
	 * @return
	 */
	public ModelProcessPlan queryCurrentProgressTwo(Integer id);
	/**
	 * 保存进度报告
	 * @param progressDto
	 */
	public void saveProgressRecord(ProgressDto progressDto);
	/**
	 * 保存进度报告明细
	 */
	public void saveProgressDetail(ProgressDetailDto progressDetailDto);
	/**
	 * 保存附件
	 */
	public void saveAnnex(@Param("progressPic")List<AnnexDto> annexList);
	
	/**
	 * 我的进度报列表
	 * @return
	 */
	public List<ProgressDto> myProgressReportList(Map<String, Object> map);
	
	/**
	 * 分页查询获取总条数
	 * @param map
	 * @return
	 */
	public Integer myProgressReportCount(Map<String, Object> map);
	/**
	 * 根据id获取台账信息
	 * @param id
	 * @return
	 */
	public ProgressDto getProgressRecordById(Integer id);
	
	/**
	 * 根据id获取台账明细信息
	 * @param id
	 * @return
	 */
	public ProgressDetailDto getProgressRecordDetailById(Integer id);
	/**
	 * 查询附件信息
	 * @param id
	 * @return
	 */
	public List<AnnexDto> getProgressAnnexListById(Integer id);
	
	/**
	 * 修改进度详细
	 * @return
	 */
	public void updateProgressDetailById(ProgressDetailDto progressDetailDto);
	
	/**
	 * 删除附件信息
	 * @param id
	 * @return
	 */
	public void deteleAnnexById(Integer id);
	
	/**
	 * 跟新工序时间
	 */
	public void updateModelProgressPlanTime(Map<String, Object> map);
	/**
	 * 厂商接受
	 * @param map
	 */
	public void accept(Map<String,Object> map);
	/**
	 * 根据计划id和汇报日期查询台账表
	 * @return
	 */
	public ProgressDto queryProcessRecordByPlanIdAndReportTime(Map<String, Object> map);
	/**
	 * 修改台账
	 */
	public void updatePlanProgressRecord(ProgressDto progressDto);
	/**
	 * 根据工序id查询实际开始时间
	 * @param id
	 * @return
	 */
	public String getAccStartTimeByid(Integer id);
	/**
	 * 新增材料使用
	 * @param meterUsedDto
	 */
	public void saveMeterUsedRecord(MeterUsedDto meterUsedDto);
	/**
	 * 查询材料信息
	 * @param map
	 * @return
	 */
	public List<ModelMeterPlan> queryMeterInfo(Map<String,Object> map);
	/**
	 * 修改下发库存
	 * @param map
	 */
	public void updateMeterAvaliablAmount(Map<String,Object> map);
	/**
	 * 材料使用详细
	 * @param map
	 * @return
	 */
	public List<MeterUsedDto> queryMeterUsedDetails(Map<String,Object> map);
	/**
	 * 材料使用详细
	 * @param map
	 * @return
	 */
	public Integer queryMeterUsedDetailsCount(Map<String,Object> map);
	/**
	 * 查询当天台账是否审核通过
	 * @param map
	 * @return
	 */
	public String queryIsExist(Map<String,Object> map);
	/**
	 * 修改最后一次提交台账日期/频率
	 * @param map
	 */
	public void updateLastReportTime(Map<String,Object> map);

	List<ModelDto> myTimingScheduleList(String id);
	/**
	 * 获取工程名称
	 * @param modelPlanId
	 * @return
	 */
	public String getEngineering(Integer modelPlanId);
	/**
	 * 获取所有工序
	 * @param modelPlanId
	 * @return
	 */
	public List<TargetDto> getAllProcessName(Integer modelPlanId);
	/**
	 * 根据计划id和工序名称获取工序计划开始时间
	 * @param map
	 * @return
	 */
	public ProgressDto getPlanStartTimeByProcessName(Map<String,String> map);
	/**
	 * 根据id获取材料使用记录
	 * @param id
	 * @return
	 */
	public MeterUsedDto getMeterUsedRecord(Integer id);
	/**
	 * 修改材料使用记录
	 * @param dto
	 * @return
	 */
	public void usedMeterEdit(MeterUsedDto dto);
	/**
	 * 获取上一条工序的实际开始时间
	 * @param map
	 * @return
	 */
	public String getPrevAccStartTime(Map<String,String> map);
	/**
	 * 保存实际精度
	 */
	public void updateRealPre(Map<String,Object> map);
	/**
	 * 修改密码
	 */
	public void factoryUpdatePassword(Map<String,String> map);
	/**
	 * 获取计划和当前进度中间的预计耗时
	 * @param map
	 * @return
	 */
	public String sumPlantotalTime(Map<String,Object> map);

	ModelPlan getmodelPlan(int modelPlanId);

	ModelDto getModel(String modelCode);
	
	/**
	 * 获取计划最后一次提交进度是否审核通过 
	 * @param modelPlanId
	 * @return
	 */
	public String getAuditResult(Integer  modelPlanId);
	
	/**
	 * 获取计划是否有提交过进度
	 * @param modelPlanId
	 * @return
	 */
	public String getRecordId(Integer  modelPlanId);
}